package com.tengju.bff.interfaces.covercharge.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.tengju.bff.interfaces.covercharge.entity.po.ServiceLetaxWithdrawLog;
import com.tengju.bff.interfaces.covercharge.entity.vo.*;

import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 * 乐税个体户体现明细表 服务类
 * </p>
 *
 * @author fwy
 * @since 2020-02-24
 */
public interface IServiceLetaxWithdrawLogService extends IService<ServiceLetaxWithdrawLog> {

    /**
     * app端获取个人，注册个体户提现审批记录列表
     *
     * @param idCode       用户Id
     * @param platformCode 平台编码
     * @param type         提现记录账户类型
     * @param dateTime     申请时间
     * @return
     */
    List<WithdrawRecordVo> getWithdrawList(Integer idCode, String platformCode, String type, String dateTime);

    /**
     * app端获取个人，注册个体户已提现金额
     *
     * @param idCode       用户Id
     * @param platformCode 平台编码
     * @param type         提现记录账户类型
     * @param dateTime     申请时间
     * @return
     */
    BigDecimal getIssuedAmount(Integer idCode, String platformCode, String type, String dateTime);

    /**
     * app端获取个人，注册个体户待收金额
     *
     * @param idCode       用户Id
     * @param platformCode 平台编码
     * @param type         提现记录账户类型
     * @param dateTime     申请时间
     * @return
     */
    BigDecimal getBeIssuedAmount(Integer idCode, String platformCode, String type, String dateTime);

    /**
     * 后台分页获取注册个体户提现申请
     *
     * @param page      分页对象
     * @param idCode    用户Id
     * @param name      代理名称
     * @param taxNo     税号
     * @param cardNo    银行卡号
     * @param platform  平台
     * @param status    审批状态
     * @param startDate
     * @param endDate
     * @return
     */
    Page<AdminRegistrationQueryVo> queryPageRegistration(Page page, String idCode, String name, String taxNo, String cardNo, String platform, Integer status, String startDate, String endDate);

    /**
     * 查询个体发放列表
     *
     * @param page              分页参数
     * @param personalGiveQuery 个体发放查询
     */
    Page<PersonalGiveVo> queryPersonalGiveList(Page<PersonalGiveVo> page, PersonalGiveQuery personalGiveQuery);


    PersonalGiveImportTaskResult importPersonalGiveCreateTask(int allSize, PersonalGiveImport personalGiveImport);

    /**
     * 导入个体发放状态
     *
     * @param personalGiveInfo   个体发放信息
     * @param personalGiveImport 个体发放类型
     */
    void importPersonalGive(String taskNo, List<String[]> personalGiveInfo, PersonalGiveImport personalGiveImport);

    /**
     * 后台分页获取个人提现申请
     *
     * @param page
     * @param idCode
     * @param name
     * @param cardNo
     * @param platform
     * @param status
     * @param startDate
     * @param endDate
     * @return
     */
    Page<AdminRegistrationQueryVo> queryPagePerson(Page page, String idCode, String name, String cardNo, String platform, Integer status, String startDate, String endDate);

    /**
     * 更新提现申请和打款流水备注
     *
     * @param withdrawFlowId 打款流水ID
     * @param remark         备注
     */
    void updateWithdrawRemark(Integer withdrawFlowId, String remark);

    /**
     * app端获取个人，注册个体户提现审批记录列表
     *
     * @param idCode       用户Id
     * @param platformCode 平台编码
     * @param type         提现记录账户类型
     * @param startTime    申请开始时间
     * @return
     */
    List<WithdrawRecordVo> withdrawListByTime(Integer idCode, String platformCode, String type, String startTime, String endTime);

    /**
     * 获取个人申请中状态记录
     *
     * @param idCode       用户Id
     * @param cardNo       银行卡号
     * @param platformCode 平台
     * @param status       审批状态
     * @param startDate    开始时间
     * @param endDate      结束时间
     * @return List<ServiceLetaxWithdrawLog>
     */
    List<ServiceLetaxWithdrawLog> queryPersonApplyList(String idCode, String cardNo, String platformCode,
                                                       Integer status, String startDate, String endDate);

    /**
     * 获取注册个体户申请中状态记录
     *
     * @param idCode       用户Id
     * @param cardNo       银行卡号
     * @param platformCode 平台
     * @param taxNo        审批状态
     * @param status       审批状态
     * @param startDate    开始时间
     * @param endDate      结束时间
     * @return List<ServiceLetaxWithdrawLog>
     */
    List<ServiceLetaxWithdrawLog> queryRegisterApplyList(String idCode, String cardNo, String platformCode,
                                                         String taxNo, Integer status, String startDate, String endDate);

    /**
     * @param page   分页参数
     * @param idCode 代理id
     * @return Page<WithdrawLogRecordVo>
     * @auth xx
     */
    Page<WithdrawLogRecordVo> queryPageByIdCode(Page page, String idCode, String status);


    /**
     * 是否存在用户提现数据
     *
     * @param idCode 用户
     * @return 是否
     */
    Boolean isExistLeTaxWithdraw(Long idCode);

    /**
     * 个体发放状态更改
     * @param personalGiveVo 个体发放信息
     */
    void updatePersonalGive(PersonalGiveVo personalGiveVo) throws Exception;

    /**
     * 乐税代发个体发放状态更改
     * @param personalGiveVo 个体发放信息
     */
    DealSinglePayResult  updateStatusLeTax(PersonalGiveVo personalGiveVo) throws Exception;

    /**
     * 根据周期提现表id查询周期提现明细
     * @param page 分页参数
     * @param cycleAddId 周期提现表id
     * @return page
     */
    IPage<ServiceLetaxWithdrawLogVo> queryPageByCycleAddId(Page page, Integer cycleAddId);

    /**
     * 根据周期id和状态返回金额
     * @param cycleAddId 周期id
     * @param status 状态
     * @return page
     * */
    BigDecimal sumMoney(Integer cycleAddId,Integer status);

    /**
     * 根据周期id获取最后提现明细数据
     * @param cycleAddId 代理id
     * @return WithdrawLogRecordVo
     * @auth cj
     */
    WithdrawLogRecordVo queryLogByCycleAddId(Integer cycleAddId);

    /**
     * 根据周期id获取是否是注册个体户提现记录
     * @param cycleAddId 代理id
     * @return Boolean
     * @auth cj
     */
    Boolean isLeTaxUser(Integer cycleAddId);

    /**
     * 查询个体发放列表
     *
     * @param page 页码
     * @param personalGiveQuery 参数
     * @return personalGiveVo
     */
    Page<PersonalGiveVo> queryPersonalGiveAllList(Page<PersonalGiveVo> page, PersonalGiveQuery personalGiveQuery);

    Page<PersonalGiveVo> queryPersonalGiveAllListAllPaid(Page<PersonalGiveVo> page, PersonalGiveQuery personalGiveQuery);

    /**
     * 修改提现记录中的乐税状态
     *
     * @param letaxStatus
     * @param cycleAddId
     */
    void updateLetaxStatus(Integer letaxStatus,Integer cycleAddId);

    /**
     * 修改提现记录中的乐税状态
     *
     * @param date
     * @param startDateStr
     * @param endDateStr
     */
    QueryPayDataResult getPayData(String date, String startDateStr, String endDateStr);

    Page<PersonalGiveVo> queryPersonalGiveAllListWithIds(Page<PersonalGiveVo> page, PersonalGiveQuery personalGiveQuery);

    PersonalGiveMoneyTotalVo queryPersonalGiveMoneyTotal(PersonalGiveQuery personalGiveQuery);

    void transferRevoke(String businessNo);
}
